package co.edu.usbcali.hibernate.logica;

import java.util.List;

import co.edu.usbcali.hibernate.modelo.Clientes;
import co.edu.usbcali.hibernate.modelo.Mascotas;
import co.edu.usbcali.hibernate.persistencia.DAOFactory;
import co.edu.usbcali.hibernate.persistencia.EntityManagerHelper;
import co.edu.usbcali.hibernate.persistencia.IMascotasDAO;



public class MascotaLogica implements IMascotaLogica{
	
	IMascotasDAO iMascotasDAO = DAOFactory.getMascotaDAO();
	
	public void borrarMascotas(Long masCodigo,Clientes clientes,
			String masNombre, Long masEdad) throws Exception {
		// TODO Auto-generated method stub
		Mascotas mascotas = null;
		
		try {
			if (masCodigo == null || masCodigo == 0) {
				throw new Exception("El codigo de la mascota es obligatorio");
			}
			EntityManagerHelper.beginTransaction();
			mascotas = iMascotasDAO.findById(masCodigo);
			if (mascotas == null) {
				throw new Exception("La mascota no existe");
			}
			
			iMascotasDAO.delete(mascotas);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
		
	}

	public Mascotas consultarMascotaPorId(Long masCodigo) throws Exception {
		// TODO Auto-generated method stub
		Mascotas mascotas = null;
		try {
			if (masCodigo == null || masCodigo ==0) {
				throw new Exception("El codigo de la mascota es obligatorio");
			}
			EntityManagerHelper.beginTransaction();
			mascotas = iMascotasDAO.findById(masCodigo);
			
			return mascotas;
		} catch (Exception e) {
			// TODO: handle exception
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		}finally{
			EntityManagerHelper.closeEntityManager();
		}
	}

	public List<Mascotas> consultarMascotas() throws Exception {
		// TODO Auto-generated method stub
		try {
			EntityManagerHelper.beginTransaction();
			return iMascotasDAO.findAll();			
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void crearMascotas(Long masCodigo, Clientes clientes,
			String masNombre, Long masEdad) throws Exception {
		// TODO Auto-generated method stub
		Mascotas mascotas = null; 
		
		try {
			if (clientes==null){
				throw new Exception("El cliente es obligatorio");
			}
			if (masCodigo == null || masCodigo == 0) {
				throw new Exception("El codigo de la mascota es obligatorio");
			}
			if (masNombre == null || masNombre.trim().equals("")) {
				throw new Exception("El nombre de la mascota es obligatorio");
			}
			if (masEdad == null || masEdad == 0) {
				throw new Exception("La edad de la mascota es obligatoria");
			}
			EntityManagerHelper.beginTransaction();
			
			mascotas = iMascotasDAO.findById(masCodigo);
			if (mascotas != null) {
				throw new Exception("La mascota ya existe");
			}			
			mascotas = new Mascotas(masCodigo, clientes, masNombre, masEdad);
			iMascotasDAO.save(mascotas);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void modificarMascotas(Long masCodigo, Clientes clientes,
			String masNombre, Long masEdad) throws Exception {
		// TODO Auto-generated method stub
		Mascotas mascotas = null; 
		
		try {
			if (masCodigo == null || masCodigo == 0) {
				throw new Exception("El codigo de la mascota es obligatorio");
			}
			if (masNombre == null || masNombre.trim().equals("")) {
				throw new Exception("El nombre de la mascota es obligatorio");
			}
			if (masEdad == null || masEdad == 0) {
				throw new Exception("La edad de la mascota es obligatoria");
			}
			EntityManagerHelper.beginTransaction();
			mascotas = iMascotasDAO.findById(masCodigo);
			if (mascotas == null) {
				throw new Exception("La mascota no existe");
			}
			
			mascotas.setMasEdad(masEdad);
			mascotas.setMasNombre(masNombre);
			mascotas.setMasCodigo(masCodigo);
			mascotas.setClientes(clientes);
			iMascotasDAO.update(mascotas);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}
		
}